home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / pygtk / 2.0 / codegen / override.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2006-01-20  |  7KB  |  243 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. import fnmatch
  5. import os
  6. import re
  7. import string
  8. import sys
  9.  
  10. def class2cname(klass, method):
  11.     c_name = ''
  12.     for c in klass:
  13.         if c.isupper():
  14.             c_name += '_' + c.lower()
  15.             continue
  16.         c_name += c
  17.     
  18.     return c_name[1:] + '_' + method
  19.  
  20. import_pat = re.compile('\\s*import\\s+(\\S+)\\.([^\\s.]+)\\s+as\\s+(\\S+)')
  21.  
  22. class Overrides:
  23.     
  24.     def __init__(self, filename = None):
  25.         self.modulename = None
  26.         self.ignores = { }
  27.         self.glob_ignores = []
  28.         self.overrides = { }
  29.         self.overridden = { }
  30.         self.kwargs = { }
  31.         self.noargs = { }
  32.         self.startlines = { }
  33.         self.override_attrs = { }
  34.         self.override_slots = { }
  35.         self.headers = ''
  36.         self.init = ''
  37.         self.imports = []
  38.         self.defines = { }
  39.         self.functions = { }
  40.         if filename:
  41.             self.handle_file(filename)
  42.         
  43.  
  44.     
  45.     def handle_file(self, filename):
  46.         oldpath = os.getcwd()
  47.         fp = open(filename, 'r')
  48.         dirname = os.path.dirname(os.path.abspath(filename))
  49.         if dirname != oldpath:
  50.             os.chdir(dirname)
  51.         
  52.         bufs = []
  53.         startline = 1
  54.         lines = []
  55.         line = fp.readline()
  56.         linenum = 1
  57.         while line:
  58.             if line == '%%\n' or line == '%%':
  59.                 if lines:
  60.                     bufs.append((string.join(lines, ''), startline))
  61.                 
  62.                 startline = linenum + 1
  63.                 lines = []
  64.             else:
  65.                 lines.append(line)
  66.             line = fp.readline()
  67.             linenum = linenum + 1
  68.         if lines:
  69.             bufs.append((string.join(lines, ''), startline))
  70.         
  71.         if not bufs:
  72.             return None
  73.         
  74.         for buf, startline in bufs:
  75.             self._Overrides__parse_override(buf, startline, filename)
  76.         
  77.         os.chdir(oldpath)
  78.  
  79.     
  80.     def __parse_override(self, buffer, startline, filename):
  81.         pos = string.find(buffer, '\n')
  82.         if pos >= 0:
  83.             line = buffer[:pos]
  84.             rest = buffer[pos + 1:]
  85.         else:
  86.             line = buffer
  87.             rest = ''
  88.         words = string.split(line)
  89.         command = words[0]
  90.         if command == 'ignore' or command == 'ignore-' + sys.platform:
  91.             for func in words[1:]:
  92.                 self.ignores[func] = 1
  93.             
  94.             for func in string.split(rest):
  95.                 self.ignores[func] = 1
  96.             
  97.         elif command == 'ignore-glob' or command == 'ignore-glob-' + sys.platform:
  98.             for func in words[1:]:
  99.                 self.glob_ignores.append(func)
  100.             
  101.             for func in string.split(rest):
  102.                 self.glob_ignores.append(func)
  103.             
  104.         elif command == 'override':
  105.             func = words[1]
  106.             if 'kwargs' in words[1:]:
  107.                 self.kwargs[func] = 1
  108.             elif 'noargs' in words[1:]:
  109.                 self.noargs[func] = 1
  110.             
  111.             self.overrides[func] = rest
  112.             self.startlines[func] = (startline + 1, filename)
  113.         elif command == 'override-attr':
  114.             attr = words[1]
  115.             self.override_attrs[attr] = rest
  116.             self.startlines[attr] = (startline + 1, filename)
  117.         elif command == 'override-slot':
  118.             slot = words[1]
  119.             self.override_slots[slot] = rest
  120.             self.startlines[slot] = (startline + 1, filename)
  121.         elif command == 'headers':
  122.             self.headers = '%s\n#line %d "%s"\n%s' % (self.headers, startline + 1, filename, rest)
  123.         elif command == 'init':
  124.             self.init = '%s\n#line %d "%s"\n%s' % (self.init, startline + 1, filename, rest)
  125.         elif command == 'modulename':
  126.             self.modulename = words[1]
  127.         elif command == 'include':
  128.             for filename in words[1:]:
  129.                 self.handle_file(filename)
  130.             
  131.             for filename in string.split(rest):
  132.                 self.handle_file(filename)
  133.             
  134.         elif command == 'import':
  135.             for line in string.split(buffer, '\n'):
  136.                 match = import_pat.match(line)
  137.                 if match:
  138.                     self.imports.append(match.groups())
  139.                     continue
  140.             
  141.         elif command == 'define':
  142.             func = words[1]
  143.             klass = None
  144.             if func.find('.') != -1:
  145.                 (klass, func) = func.split('.', 1)
  146.                 if not self.defines.has_key(klass):
  147.                     self.defines[klass] = { }
  148.                 
  149.                 self.defines[klass][func] = rest
  150.             else:
  151.                 self.functions[func] = rest
  152.             if 'kwargs' in words[1:]:
  153.                 self.kwargs[func] = 1
  154.             elif 'noargs' in words[1:]:
  155.                 self.noargs[func] = 1
  156.             
  157.             self.startlines[func] = (startline + 1, filename)
  158.         
  159.  
  160.     
  161.     def is_ignored(self, name):
  162.         if self.ignores.has_key(name):
  163.             return 1
  164.         
  165.         for glob in self.glob_ignores:
  166.             if fnmatch.fnmatchcase(name, glob):
  167.                 return 1
  168.                 continue
  169.         
  170.         return 0
  171.  
  172.     
  173.     def is_overriden(self, name):
  174.         return self.overrides.has_key(name)
  175.  
  176.     
  177.     def is_already_included(self, name):
  178.         return self.overridden.has_key(name)
  179.  
  180.     
  181.     def override(self, name):
  182.         self.overridden[name] = 1
  183.         return self.overrides[name]
  184.  
  185.     
  186.     def define(self, klass, name):
  187.         self.overridden[class2cname(klass, name)] = 1
  188.         return self.defines[klass][name]
  189.  
  190.     
  191.     def function(self, name):
  192.         return self.functions[name]
  193.  
  194.     
  195.     def getstartline(self, name):
  196.         return self.startlines[name]
  197.  
  198.     
  199.     def wants_kwargs(self, name):
  200.         return self.kwargs.has_key(name)
  201.  
  202.     
  203.     def wants_noargs(self, name):
  204.         return self.noargs.has_key(name)
  205.  
  206.     
  207.     def attr_is_overriden(self, attr):
  208.         return self.override_attrs.has_key(attr)
  209.  
  210.     
  211.     def attr_override(self, attr):
  212.         return self.override_attrs[attr]
  213.  
  214.     
  215.     def slot_is_overriden(self, slot):
  216.         return self.override_slots.has_key(slot)
  217.  
  218.     
  219.     def slot_override(self, slot):
  220.         return self.override_slots[slot]
  221.  
  222.     
  223.     def get_headers(self):
  224.         return self.headers
  225.  
  226.     
  227.     def get_init(self):
  228.         return self.init
  229.  
  230.     
  231.     def get_imports(self):
  232.         return self.imports
  233.  
  234.     
  235.     def get_defines_for(self, klass):
  236.         return self.defines.get(klass, { })
  237.  
  238.     
  239.     def get_functions(self):
  240.         return self.functions
  241.  
  242.  
  243.